package com.idanchuang.support.etcache.local;

import java.util.Map;

/**
 *
 * 本地缓存
 *
 * @author yjy
 * Created at 2021/12/21 12:01 下午
 */
public interface LocalCache<K, V> {

    /**
     * 读取一个缓存
     * @param key ..
     * @return ..
     */
    V get(K key);

    /**
     * 批量读取缓存
     * @param keys ..
     * @return ..
     */
    Map<K, V> getAll(Iterable<K> keys);

    /**
     * 设置一个缓存
     * @param key ..
     * @param value ..
     */
    void set(K key, V value);

    /**
     * 批量设置缓存
     * @param map 缓存键值对集合
     */
    void setAll(Map<K, V> map);

    /**
     * 移除一个缓存
     * @param key ..
     */
    void remove(K key);

    /**
     * 批量移除缓存
     * @param keys ..
     */
    void removeAll(Iterable<K> keys);

    /**
     * 精准移除 (内部使用)
     * @param localKey 精准的缓存key
     */
    void removeAccurate(LocalKey<K> localKey);

    /**
     * 清空本地缓存
     */
    void clear();

    /**
     * 当前缓存集合大小
     * @return ..
     */
    int estimatedSize();

    /**
     * 获取本地缓存配置
     * @return ..
     */
    LocalCacheConfig getConfig();

    /**
     * 销毁本地缓存对象
     */
    default void destroy() {
        clear();
    }

}
